﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.SICOM.Modelo;

namespace Libreria.SICOM.Negocio
{
    public class MuestraNegocio
    {
        public List<Muestra> consultarMuestras(String CadenaDeConexion)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);
            return nuevaMuestra.consultar();
        }

        public List<Muestra> consultarMuestras(int numeroDeRegistros, String CadenaDeConexion)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);
            return nuevaMuestra.consultar(numeroDeRegistros, true);
        }

        public List<Muestra> consultarMuestrasxlugaryvariable(Int32? idlugar,Int32? idvariable, int numeroRegistros,  String CadenaDeConexion)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);
            nuevaMuestra.Iddelugar = idlugar;
            nuevaMuestra.Iddevariable = idvariable;
            return nuevaMuestra.consultar(numeroRegistros, true);
        }
        public void CrearMuestra(String Identificador, Int32? idtipodemuestra, Int32? iddeproyecto, Int32? iddelugar, DateTime fecha, Int32? responsable, String mac,
           Int32? iddeequipo, Int32? iddevariable, String valor, String CadenaDeConexion)
        {
            Muestra Muestra = new Muestra(CadenaDeConexion);
            Muestra.Identificador = Identificador;
            Muestra.Idtipodemuestra = idtipodemuestra;
            Muestra.Iddeproyecto = iddeproyecto;
            Muestra.Iddelugar = iddelugar;
            Muestra.Fechadecaptura = fecha;
            Muestra.Codigoderesponsable = responsable;
            Muestra.Mac = mac;
            Muestra.Iddeequipo = iddeequipo;
            Muestra.Iddevariable = iddevariable;
            Muestra.Valor = valor;
            Muestra.crear();
        }

    
       
        public void eliminarMuestra(String Identificador, String CadenaDeConexion)
        {
            Muestra Muestra = new Muestra(CadenaDeConexion);
            Muestra.Identificador = Identificador;
            Muestra.eliminar();
        }

        
        public List<Muestra> ConsultarReporte(Boolean Automatico, Boolean Manual, Int32? idtipodemuestra, Int32? iddeproyecto, Int32? iddelugar, DateTime Fechainicial, DateTime Fechafinal,
              Int32? iddeequipo, String mac, Int32? iddevariable, String CadenaDeConexion)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);

            nuevaMuestra.Identificador = null;
            nuevaMuestra.Idtipodemuestra = idtipodemuestra;
            nuevaMuestra.Iddeproyecto = iddeproyecto;
            nuevaMuestra.Iddelugar = iddelugar;
            nuevaMuestra.Iddeequipo = iddeequipo;
            nuevaMuestra.Mac = mac;
            nuevaMuestra.Iddevariable = iddevariable;
            nuevaMuestra.Fechadecaptura = DateTime.MinValue;

            List<Muestra> muestrasTemp = nuevaMuestra.consultar();

            if (Fechainicial != DateTime.MinValue && Fechafinal != DateTime.MinValue)
            {
                for (int i = muestrasTemp.Count - 1; i >= 0; i--)
                {
                    if (muestrasTemp[i].Fechadecaptura < Fechainicial || muestrasTemp[i].Fechadecaptura > Fechafinal)
                    {
                        muestrasTemp.Remove(muestrasTemp[i]);
                    }

                }
            }

            if (!(!Automatico && !Manual))
            {
                string inicios = "";

                if (Automatico)
                {
                    inicios = "A";
                }

                if (Manual)
                {
                    inicios = "M";
                }

                if ((!Automatico && Manual) || (Automatico && !Manual))
                {
                    for (int j = muestrasTemp.Count - 1; j >= 0; j--)
                    {
                        if (!(muestrasTemp[j].Identificador.StartsWith(inicios))) 
                        {
                            muestrasTemp.Remove(muestrasTemp[j]);
                        }

                    }
                }
            }
            return muestrasTemp;        
        }

        public List<Muestra> ConsultarPorvariables(string[] idsvariables, String CadenaDeConexion, int numeroRegistros)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);
            List<Muestra> Muestrastemp = new List<Muestra>();

            foreach (var variable in idsvariables)
            {
                int idVar = 0;
                int.TryParse(variable, out idVar);
                nuevaMuestra.Iddeproyecto = null;
                nuevaMuestra.Iddeequipo = null;
                nuevaMuestra.Iddelugar = null;
                nuevaMuestra.Iddevariable = idVar;
                nuevaMuestra.Identificador = null;
                nuevaMuestra.Idtipodemuestra = null;
                nuevaMuestra.Valor = null;
                nuevaMuestra.Fechadecaptura = DateTime.MinValue;
                nuevaMuestra.Codigoderesponsable = null;
                nuevaMuestra.Mac = null;

                Muestrastemp.AddRange(nuevaMuestra.consultar(numeroRegistros, true));

            }

            /*
             * asarmiento : 03/12/2013
             * Se comenta para mejora de consulta
            for (int i = Muestrastemp.Count - 1; i >= 0; i--)
            {
                if (!idsvariables.Contains(Muestrastemp[i].Iddevariable.Value.ToString()))
                {
                    Muestrastemp.Remove(Muestrastemp[i]);
                }
            }
             */

            return Muestrastemp;
        }

        public List<Muestra> ConsultarPorequipos(string[] idsequipos, String CadenaDeConexion, int numeroRegistros)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);
            List<Muestra> Muestrastemp = new List<Muestra>();

            foreach (var equipo in idsequipos)
            {
                int idEqu = 0;
                int.TryParse(equipo, out idEqu);
                nuevaMuestra.Iddeproyecto = null;
                nuevaMuestra.Iddeequipo = idEqu;
                nuevaMuestra.Iddelugar = null;
                nuevaMuestra.Iddevariable = null;
                nuevaMuestra.Identificador = null;
                nuevaMuestra.Idtipodemuestra = null;
                nuevaMuestra.Valor = null;
                nuevaMuestra.Fechadecaptura = DateTime.MinValue;
                nuevaMuestra.Codigoderesponsable = null;
                nuevaMuestra.Mac = null;

                Muestrastemp.AddRange(nuevaMuestra.consultar(numeroRegistros, true));

            }

            /*
             * asarmiento : 03/12/2013
             * Se comenta para mejora de consulta
            for (int i = Muestrastemp.Count - 1; i >= 0; i--)
            {
                if (!idsequipos.Contains(Muestrastemp[i].Iddeequipo.Value.ToString()))
                {
                    Muestrastemp.Remove(Muestrastemp[i]);
                }
            }
             */
            
            return Muestrastemp;
        }

        public List<Muestra> ConsultarPorproyectos(string[] idsproyectos, String CadenaDeConexion, int numeroRegistros)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);
            List<Muestra> Muestrastemp = new List<Muestra>();

            foreach (var proyecto in idsproyectos)
            {
                int idProy = 0;
                int.TryParse(proyecto, out idProy);
                nuevaMuestra.Iddeproyecto = idProy;
                nuevaMuestra.Iddeequipo = null;
                nuevaMuestra.Iddelugar = null;
                nuevaMuestra.Iddevariable = null;
                nuevaMuestra.Identificador = null;
                nuevaMuestra.Idtipodemuestra = null;
                nuevaMuestra.Valor = null;
                nuevaMuestra.Fechadecaptura = DateTime.MinValue;
                nuevaMuestra.Codigoderesponsable = null;
                nuevaMuestra.Mac = null;

                Muestrastemp.AddRange(nuevaMuestra.consultar(numeroRegistros, true));

            }
            /*
             * asarmiento : 03/12/2013
             * Se comenta para mejora de consulta
            for (int i = Muestrastemp.Count - 1; i >= 0; i--)
            {
                if (!idsproyectos.Contains(Muestrastemp[i].Iddeproyecto.Value.ToString()))
                {
                    Muestrastemp.Remove(Muestrastemp[i]);
                }
            }
             */


            return Muestrastemp;
        }

        public List<Muestra> ConsultarPortiposdemuesra(string[] idstiposdemuestra, String CadenaDeConexion, int numeroRegistros)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);
            List<Muestra> Muestrastemp = new List<Muestra>();

            foreach (var tipoMuestra in idstiposdemuestra)
            {
                int idTMu = 0;
                int.TryParse(tipoMuestra, out idTMu);
                nuevaMuestra.Iddeproyecto = null;
                nuevaMuestra.Iddeequipo = null;
                nuevaMuestra.Iddelugar = null;
                nuevaMuestra.Iddevariable = null;
                nuevaMuestra.Identificador = null;
                nuevaMuestra.Idtipodemuestra = idTMu;
                nuevaMuestra.Valor = null;
                nuevaMuestra.Fechadecaptura = DateTime.MinValue;
                nuevaMuestra.Codigoderesponsable = null;
                nuevaMuestra.Mac = null;

                Muestrastemp.AddRange(nuevaMuestra.consultar(numeroRegistros, true));

            }
            /*
             * asarmiento : 03/12/2013
             * Se comenta para mejora de consulta
            for (int i = Muestrastemp.Count - 1; i >= 0; i--)
            {
                if (!idstiposdemuestra.Contains(Muestrastemp[i].Idtipodemuestra.Value.ToString()))
                {
                    Muestrastemp.Remove(Muestrastemp[i]);
                }
            }
             */


            return Muestrastemp;
        }

        public List<Muestra> ConsultarPorLugar(Int32? idluagar, String CadenaDeConexion)
        {
            Muestra nuevaMuestra = new Muestra(CadenaDeConexion);
            List<Muestra> Muestrastemp = nuevaMuestra.consultar();

            for (int i = Muestrastemp.Count - 1; i >= 0; i--)
            {
                if (!(idluagar == (Muestrastemp[i].Iddelugar.Value)))
                {
                    Muestrastemp.Remove(Muestrastemp[i]);
                }
            }


            return Muestrastemp;
        }
    }
}
